package com.cykj.faceledtv.utils;

/**
 * @author jzh
 * @date 2018/11/03 11:23
 */

public class ByteUtils {

    /**
     * mac地址转为6字节
     */
    public static byte[] getMacBytes(String mac) {
        byte[] macBytes = new byte[6];
        String[] strArr = mac.split(":");
        for (int i = 0; i < strArr.length; i++) {
            int value = Integer.parseInt(strArr[i], 16);
            macBytes[i] = (byte) value;
        }
        return macBytes;
    }

    public static byte[] shortToBytes(short data) {
        byte[] bytes = new byte[2];
        bytes[1] = (byte) (data & 0xff);
        bytes[0] = (byte) ((data & 0xff00) >> 8);
        return bytes;
    }

    public static byte[] charToBytes2(char data) {
        byte[] bytes = new byte[2];
        bytes[1] = (byte) (data);
        bytes[0] = (byte) (data >> 8);
        return bytes;
    }

    public static byte[] charToBytes1(char data) {
        byte[] bytes = new byte[1];
        bytes[0] = (byte) (data);
        return bytes;
    }

    public static byte charToBytes(char data) {
        return (byte) (data);
    }

    public static byte[] intToBytes4(int data) {
        byte[] bytes = new byte[4];
        bytes[3] = (byte) (data & 0xff);
        bytes[2] = (byte) ((data & 0xff00) >> 8);
        bytes[1] = (byte) ((data & 0xff0000) >> 16);
        bytes[0] = (byte) ((data & 0xff000000) >> 24);
        return bytes;
    }

    public static byte[] intToBytes1(int data) {
        byte[] bytes = new byte[1];
        bytes[0] = (byte) (data & 0xff);
        return bytes;
    }

    public static byte intToBytes(int data) {
        return (byte) (data & 0xff);
    }

    public static byte[] intToBytes2(int data) {
        byte[] bytes = new byte[2];
        bytes[1] = (byte) (data & 0xff);
        bytes[0] = (byte) ((data & 0xff00) >> 8);
        return bytes;
    }

    public static byte[] intToBytes3(int data) {
        byte[] bytes = new byte[3];
        bytes[2] = (byte) (data & 0xff);
        bytes[1] = (byte) ((data & 0xff00) >> 8);
        bytes[0] = (byte) ((data & 0xff0000) >> 16);
        return bytes;
    }

    public static byte[] longToByte3(long data) {
        byte[] bytes = new byte[3];
        bytes[2] = (byte) (data & 0xff);
        bytes[1] = (byte) ((data & 0xff00) >> 8);
        bytes[0] = (byte) ((data & 0xff0000) >> 16);
        return bytes;
    }

    public static byte[] longToByte4(long data) {
        byte[] bytes = new byte[4];
        bytes[3] = (byte) (data & 0xff);
        bytes[2] = (byte) ((data & 0xff00) >> 8);
        bytes[1] = (byte) ((data & 0xff0000) >> 16);
        bytes[0] = (byte) ((data & 0xff000000) >> 24);
        return bytes;
    }


    public static char byteArrayToChar(byte[] bytes) {
        return (char) ((0xff & bytes[1]) | (0xff00 & (bytes[0] << 8)));
    }

    public static char byteArrayToChar1(byte[] bytes) {
        return (char) (0xff00 & (bytes[0] << 8));
    }

    public static int byteArrayToInt(byte[] bytes) {
        return (0xff & bytes[0]);
    }

    public static int byteToInt(byte bytes) {
        return (0xff & bytes);
    }

    public static int byteArrayToInt2(byte[] bytes) {
        return (0xff & bytes[1]) | (0xff00 & (bytes[0] << 8));
    }

    public static int byteArrayToIn3(byte[] bytes) {
        return (0xff & bytes[2]) | (0xff00 & (bytes[1] << 8)) | (0xff0000 & (bytes[0] << 16));
    }

    public static int byteArrayToInt4(byte[] bytes) {
        return (0xff & bytes[3]) | (0xff00 & (bytes[2] << 8)) | (0xff0000 & (bytes[1] << 16))
                | (0xff000000 & (bytes[0] << 24));
    }


    /**
     * 合并byte数组
     */
    public static byte[] mergeByteArray(byte[]... bytes) {
        if (bytes == null || bytes.length <= 0) {
            return null;
        }
        int length = 0;
        for (byte[] datas : bytes) {
            if (datas != null) {
                length += datas.length;
            }
        }
        byte[] result = new byte[length];
        int curretLength = 0;
        for (int i = 0; i < bytes.length; i++) {
            byte[] data = bytes[i];
            if (data != null) {
                if (i != 0) {
                    curretLength += bytes[i - 1].length;
                }
                System.arraycopy(data, 0, result, curretLength, data.length);
            }
        }
        return result;
    }


    /**
     * 根据索引截取指定的byte数组
     */
    public static byte[] copyByte(byte[] data, int begin, int length) {
        if (length == 0) {
            return null;
        }
        byte[] newByte = new byte[length];
        System.arraycopy(data, begin, newByte, 0, length);
        return newByte;
    }
}
